//
//  satVisitor.h
//  ltlbmc
//
//

#ifndef ltlbmc_satVisitor_h
#define ltlbmc_satVisitor_h

#include "ast.h"

#define	STATE		int*
#define	GLOBAL		int*
#define	LOCAL		int*


using namespace cilast;
    
    
class satVisitor : public astVisitor {

public:
    satVisitor();
    
    int visit(block*);
    
    //constant
    int visit(constant*);
    int visit(CInt64*);
    int visit(CStr*);
    int visit(CWStr*);
    int visit(CChr*);
    int visit(CReal*);
    int visit(CEnum*);
    
    //exp
    int visit(exp*);
    int visit(Const*);
    int visit(Lval*);
    int visit(SizeOf*);
    int visit(SizeOfE*);
    int visit(SizeOfStr*);
    int visit(AlignOf*);
    int visit(AlignOfE*);
    int visit(UnOp*);
    int visit(BinOp*);
    int visit(CastE*);
    int visit(AddrOf*);
    int visit(StartOf*);
    
    
    //init
    int visit(init*) ;
    int visit(SingleInit*);
    int visit(OffsetInit*);
    int visit(CompoundInit*);
    
    //instr
    int visit(instr*);
    int visit(Set*);
    int visit(Call*);
    int visit(Asm*);
    
    //lhost
    int visit(lhost*);
    int visit(Var*);
    int visit(Mem*);
    
    //lval
    int visit(lval*);
    
    
    //fundec
    int visit(fundec*);
    
    //stmt
    int visit(stmt*);
    
    //stmtkind
    int visit(stmtkind*);
    int visit(Instr*);
    int visit(Return*);
    int visit(Goto*);
    int visit(Break*);
    int visit(Continue*);
    int visit(If*);
    int visit(Switch*);
    int visit(Loop*);
    int visit(Block*);
    int visit(TryFinally*);
    int visit(TryExcept*);
    
    //global
    int visit(global*);
    int visit(GType*);
    int visit(GCompTag*);
    int visit(GCompTagDecl*);
    int visit(GEnumTag*);
    int visit(GEnumTagDecl*);
    int visit(GVarDecl*);
    int visit(GVar*);
    int visit(GFun*);
    int visit(GAsm*);
    int visit(GPragma*);
    int visit(GText*);

    
};
    
  
    



#endif
